# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/10/24 0024 20:44
@Author : 测试开发工程师
@File : 13. 主键，非空，唯一约束.py
@Software: PyCharm
============================
"""

"""
SQL 约束：
    对表中的数据进行进一步的限制
    保证数据的正确性、有效性、完整性
    违反约束的不正确数据无法插入到表中
    常见的约束
    主键：PRIMARY KEY
    非空：NOT NULL
    唯一：UNIQUE
    默认：DEFAULT
    外键：FOREIGN KEY

主键约束：

    主键：一列（或一组列），其值能够唯一标识表中每一行
    特点：不可重复，唯一，非空
    语法：列名 字段类型 PRIMARY KEY

-- 创建一个带主键的表

CREATE TABLE emp1(  

    -- 设置主键 唯一 非空 

    eid INT PRIMARY KEY, 

    ename VARCHAR(20), 

    sex CHAR(1)

);



-- 给存在的表添加主键

CREATE TABLE emp2( 

    eid INT , 

    ename VARCHAR(20), 

    sex CHAR(1) 

)



-- 通过 DDL 语句进行设置 

ALTER TABLE emp2 ADD PRIMARY KEY(eid);

AUTO_INCREMENT：表示自动增长(字段类型必须是整数类型)

-- 创建主键自增的表 
CREATE TABLE emp3(
    eid INT PRIMARY KEY AUTO_INCREMENT, 
    ename VARCHAR(20), 
    sex CHAR(1) 
);

-- 创建主键自增的表,自定义自增起始值 ，从 100 开始自增

CREATE TABLE emp4( 

    eid INT PRIMARY KEY AUTO_INCREMENT, 

    ename VARCHAR(20), 

    sex CHAR(1) 

)AUTO_INCREMENT=100;


删除表数据后
delete from  emp4;  （对自增没有影响）


truncate table eap4;
再次添加数值，自增的 id 值   （从1重新开始）


-- 删除表中的主键

ALTER TABLE 表名 DROP PRIMARY KEY;



-- 使用 DDL 语句删除表中的主键 

ALTER TABLE emp2 DROP PRIMARY KEY; 

-- 查看表结构

DESC emp2;


选择主键原则：
    针对业务设计主键，往建议每张表都设计一个主键
    主键可以没有业务意义，只需要保证不重复



# =============================================================================================

非空约束：
    非空约束特点: 某一列不予许为空
    语法：列名 字段类型 NOT NULL

-- 添加非空约束
CREATE TABLE emp5( 

    eid INT PRIMARY KEY AUTO_INCREMENT, 

    -- ename 字段不能为空 

    ename VARCHAR(20) NOT NULL, 

    sex CHAR(1) 

);



# =================================================================================================

唯一约束：
    唯一约束: 表中的某一列的值不能重复
    对 NULL 不做唯一的判断
    语法：列名 字段类型 UNIQUE

-- 创建带有唯一约束的表
  
CREATE TABLE emp6(

    eid INT PRIMARY KEY AUTO_INCREMENT,

    -- 为 ename 字段添加唯一约束

    ename VARCHAR(20) UNIQUE,

    sex CHAR(1) 

);

# ======================================================

主键约束，唯一且不能够为空
唯一约束，唯一但是可以为空
一个表中只能有一个主键，但是可以有多个唯一约束

表中设置默认值

"""
